try/catch를 사용해서 에러 핸들링을 할 때 주의할 점
-
useEffect를 try/catch로 감싸도 동작하지 않는다.
try/catch 실행컨텍스트는 끝나고 렌더링 후에 콜백이 실행됨. 따라서 catch로 잡을 수 없다.
-
렌더링할 컴포넌트 내부에서 발생한 에러를 try/catch 잡을 수 없다.
<Child>
는 리액트 엘레멘트 객체를 생성하는 함수. 컴포넌트 내부에서 어떤 실행을 하는지는 알 수 없음 -
렌더링 중에 상태를 업데이트하는 방식은 안된다.
위에서는 try/catch문 보다도 setHasError로 인해서 무한 렌더링이 발생하므로 올바르지 않다. useEffect로 감싸던지..
ErrorBoundary
하위 컨텍스트에서 발생한 에러를 캐치하여 그에 따른 동작을 수행할 수 있는 컴포넌트
- errorboundary는 오직 리액트 라이프 사이클동안에 발생하는 에러만 캐치할 수 있다.
ex)
- useEffect 내부 에러 (O)
- click 이벤트 콜백 (X)
- fetch 에러 (X)
- 위 불편함을 해소하기 위해서 setState를 동작시키면서 에러를 throw시키면 에러바운더리가 동작한다.
hook으로 빼니깐 나쁘지 않아보임.